﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace WindowsFormsApplication3
{
    public partial class Libro : Form
    {
        DataSet dsLibros = new DataSet();
        string rutaBDBiblioteca = "Data Source=JOHANA-PC;Initial Catalog=Biblioteca;Integrated Security=True";
        CheckBox ChbEstado = new CheckBox();
        BindingManagerBase bmLibros;
       
        public Libro()
        {
            InitializeComponent();
        }

        private void NuevoLibro_Load(object sender, EventArgs e)
        {
            SetearControl();
            SqlConnection cnBiblioteca;
            AccDatBiblioteca datos = new AccDatBiblioteca();

            cnBiblioteca = datos.ObtenerConexion(rutaBDBiblioteca);
            SqlDataAdapter adp = datos.ObtenerAdaptador("Select * from Libros", cnBiblioteca);

            adp.Fill(dsLibros, "Libros");
            cnBiblioteca.Close();

            Grilla_Lib.DataSource = dsLibros.Tables["Libros"];
            Grilla_Lib.Refresh();
            TitulosColumnas();

            bmLibros = BindingContext[dsLibros, "Libros"];
            AsociarTextos();
            MostrarPosicion();   
        }

       

        private void TitulosColumnas()
        {
            Grilla_Lib.Columns["Cod_Lib"].HeaderText = "CODIGO";
            Grilla_Lib.Columns["Isbn"].HeaderText = "ISBN";
            Grilla_Lib.Columns["Tit_Lib"].HeaderText = "TITULO";
            Grilla_Lib.Columns["Cod_Cat"].HeaderText = "CATEGORIA";
            Grilla_Lib.Columns["Cod_Edit"].HeaderText = "EDITORIAL";
            Grilla_Lib.Columns["Idioma_orig"].HeaderText = "IDIOMA ORIGINAL";
            Grilla_Lib.Columns["Idioma_Lib"].HeaderText = "IDIOMA LIBRO";
            Grilla_Lib.Columns["Año_Edic"].HeaderText = "AÑO EDICION";
            Grilla_Lib.Columns["Num_Edic"].HeaderText = "NUM EDICION";
            Grilla_Lib.Columns["Año_Ing"].HeaderText = "AÑO INGRESO";
            Grilla_Lib.Columns["Num_Pag"].HeaderText = "PAGINAS";
            Grilla_Lib.Columns["Cant_Lib"].HeaderText = "CANTIDAD";
            Grilla_Lib.Columns["Est_Lib"].HeaderText = "ESTADO";
        }

        private void ReemplazarControl(Control controlAnterior, Control controlNuevo)
        {
            Point ubicacion;
            Size tamanio;
            ubicacion = controlAnterior.Location;
            tamanio = controlAnterior.Size;
            controlNuevo.Location = ubicacion;
            controlNuevo.Size = tamanio;
            HabilitarControl(controlNuevo, true);
            HabilitarControl(controlAnterior, false);
        }

        private void HabilitarControl(Control ctl, bool estado)
        {
            ctl.Enabled = estado;
            ctl.Visible = estado;
        }


        private void SetearControl()
        {
            ReemplazarControl(TxtEst_Lib, ChbEstado);
            this.Controls.Add(ChbEstado);
            HabilitarControl(TxtEst_Lib, false);
        }

        private void MostrarPosicion()
        {
            int iTotal = bmLibros.Count;
            int iPos;

            if (iTotal == 0)
                LblPosicion.Text = "No Registros";
            else
            {
                iPos = bmLibros.Position + 1;
                LblPosicion.Text = iPos.ToString() + " de " + iTotal.ToString();
            }
        }

        private void AsociarTextos()
        {
            TxtCod_Lib.DataBindings.Add(new Binding("Text", dsLibros, "Libros." + dsLibros.Tables["Libros"].Columns[0].ColumnName.ToString()));
            TxtIsbn.DataBindings.Add(new Binding("Text", dsLibros, "Libros." + dsLibros.Tables["Libros"].Columns[1].ColumnName.ToString()));
            TxtTit_Lib.DataBindings.Add(new Binding("Text", dsLibros, "Libros." + dsLibros.Tables["Libros"].Columns[2].ColumnName.ToString()));
            TxtCod_Cat.DataBindings.Add(new Binding("Text", dsLibros, "Libros." + dsLibros.Tables["Libros"].Columns[3].ColumnName.ToString()));
            TxtCod_Edit.DataBindings.Add(new Binding("Text", dsLibros, "Libros." + dsLibros.Tables["Libros"].Columns[4].ColumnName.ToString()));
            TxtIdioma_orig.DataBindings.Add(new Binding("Text", dsLibros, "Libros." + dsLibros.Tables["Libros"].Columns[5].ColumnName.ToString()));
            TxtIdioma_Lib.DataBindings.Add(new Binding("Text", dsLibros, "Libros." + dsLibros.Tables["Libros"].Columns[6].ColumnName.ToString()));
            TxtAño_Edic.DataBindings.Add(new Binding("Text", dsLibros, "Libros." + dsLibros.Tables["Libros"].Columns[7].ColumnName.ToString()));
            TxtNum_Edic.DataBindings.Add(new Binding("Text", dsLibros, "Libros." + dsLibros.Tables["Libros"].Columns[8].ColumnName.ToString()));
            TxtAño_Ing.DataBindings.Add(new Binding("Text", dsLibros, "Libros." + dsLibros.Tables["Libros"].Columns[9].ColumnName.ToString()));
            TxtNum_Pag.DataBindings.Add(new Binding("Text", dsLibros, "Libros." + dsLibros.Tables["Libros"].Columns[10].ColumnName.ToString()));
            TxtCant_Lib.DataBindings.Add(new Binding("Text", dsLibros, "Libros." + dsLibros.Tables["Libros"].Columns[11].ColumnName.ToString()));
            ChbEstado.DataBindings.Add(new Binding("Checked", dsLibros, "Libros." + dsLibros.Tables["Libros"].Columns[12].ColumnName.ToString()));
        }


        private void BtnPrimero_Click(object sender, EventArgs e)
        {

            bmLibros.Position = 0;
            MostrarPosicion();
        }

        private void BtnAnterior_Click(object sender, EventArgs e)
        {
            bmLibros.Position -= 1;
            MostrarPosicion();
        }

        private void BtnSiguiente_Click(object sender, EventArgs e)
        {
            bmLibros.Position += 1;
            MostrarPosicion();
        }

        private void BtnUltimo_Click(object sender, EventArgs e)
        {
            bmLibros.Position = bmLibros.Count - 1;
            MostrarPosicion();
        }

        private void BtnSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void BtnAñadir_Click(object sender, EventArgs e)
        {
            DataTable Libros = dsLibros.Tables["Libros"];
            DataRowCollection cfilas = Libros.Rows;
            DataRow nuevaFila;
            try
            {
                nuevaFila = Libros.NewRow();
                // Datos por omisión para las columnas de la nueva fila
                nuevaFila[0] = "Cod_Lib";
                nuevaFila[1] = "Isbn";
                nuevaFila[2] = "Titulo";
                nuevaFila[3] = "";
                nuevaFila[4] = "";
                nuevaFila[5] = "";
                nuevaFila[6] = "";
                nuevaFila[7] = 1940;
                nuevaFila[8] = 1;
                nuevaFila[9] = 1940;
                nuevaFila[10] = 100;
                nuevaFila[11] = 1;
                nuevaFila[12] = true;
                cfilas.Add(nuevaFila);
                BtnUltimo.PerformClick();
                MostrarPosicion();
                LblResultado.Text = "";
                TxtCod_Lib.Enabled = true;
                TxtCod_Lib.Focus();
            }
            catch (ConstraintException ex)
            {
                // Capturar posible error por clave duplicada
                MessageBox.Show(ex.Message);
            }
        }

        private void BtnGuardar_Click(object sender, EventArgs e)
        {
            GestLibro GLibro = new GestLibro();
            if (GLibro.ExisteLibro(TxtCod_Lib.Text, rutaBDBiblioteca))
                LblResultado.Text = "Libro Existente";
            else
            {
                CLibro NuevoLibro =
                     new CLibro(TxtCod_Lib.Text, TxtIsbn.Text, TxtTit_Lib.Text, TxtCod_Cat.Text, TxtCod_Edit.Text, TxtIdioma_orig.Text,
                                TxtIdioma_Lib.Text, int.Parse(TxtAño_Edic.Text), int.Parse(TxtNum_Edic.Text), int.Parse(TxtAño_Ing.Text),
                                int.Parse(TxtNum_Pag.Text), int.Parse(TxtCant_Lib.Text), ChbEstado.Checked);
                if (!GLibro.GrabarLibro(NuevoLibro, rutaBDBiblioteca))
                    LblResultado.Text = "Error en el registro del Libro";
                else
                {
                    LblResultado.Text = "Libro Guardado";
                }
            }
        }

        private void BtnBorrar_Click(object sender, EventArgs e)
        {
            GestLibro GLibro = new GestLibro();
            CLibro EliminarLibro =
                     new CLibro(TxtCod_Lib.Text, TxtIsbn.Text, TxtTit_Lib.Text, TxtCod_Cat.Text, TxtCod_Edit.Text, TxtIdioma_orig.Text,
                                TxtIdioma_Lib.Text, int.Parse(TxtAño_Edic.Text), int.Parse(TxtNum_Edic.Text), int.Parse(TxtAño_Ing.Text),
                                int.Parse(TxtNum_Pag.Text), int.Parse(TxtCant_Lib.Text), ChbEstado.Checked = false);

            if (GLibro.EliminarLibro(EliminarLibro, rutaBDBiblioteca))
            {
                LblResultado.Text = "Libro Eliminado";
                bmLibros.Position -= 1; //muestra el registro anterior
                MostrarPosicion();
            }
            else
                LblResultado.Text = "Libro no Eliminado";
        }

        private void BtnModificar_Click(object sender, EventArgs e)
        {
            GestLibro GLibro = new GestLibro();
            CLibro ModificarLibro =
                     new CLibro(TxtCod_Lib.Text, TxtIsbn.Text, TxtTit_Lib.Text, TxtCod_Cat.Text, TxtCod_Edit.Text, TxtIdioma_orig.Text,
                                TxtIdioma_Lib.Text, int.Parse(TxtAño_Edic.Text), int.Parse(TxtNum_Edic.Text), int.Parse(TxtAño_Ing.Text),
                                int.Parse(TxtNum_Pag.Text), int.Parse(TxtCant_Lib.Text), ChbEstado.Checked);

            if (GLibro.ModificarLibro(ModificarLibro, rutaBDBiblioteca))
            {
                LblResultado.Text = "Libro Modificado";
            }
            else
                LblResultado.Text = "Libro no Modificado";
        }

        private void BtnActualizar_Click(object sender, EventArgs e)
        {
            dsLibros.Tables.Clear();
            SqlConnection cnBiblioteca;

            AccDatBiblioteca AccDatBiblioteca = new AccDatBiblioteca();

            cnBiblioteca = AccDatBiblioteca.ObtenerConexion(rutaBDBiblioteca);
            SqlDataAdapter adp = AccDatBiblioteca.ObtenerAdaptador("SELECT * FROM Libros", cnBiblioteca);

            adp.Fill(dsLibros, "Libros");
            cnBiblioteca.Close();
            Grilla_Lib.DataSource = dsLibros.Tables["Libros"];
            bmLibros = BindingContext[dsLibros, "Libros"];
            bmLibros.Position = bmLibros.Count - 1;
            MostrarPosicion();
            LblResultado.Text = "";
            TxtCod_Lib.Focus();
        }

        private void TxtCod_Lib_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar))
                e.Handled = false;
            else
                if (Char.IsControl(e.KeyChar))
                    e.Handled = false;
                else
                    e.Handled = true;
        }

        private void TxtIsbn_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar))
                e.Handled = false;
            else
                if (Char.IsControl(e.KeyChar))
                    e.Handled = false;
                else
                    e.Handled = true;
        }

        private void TxtTit_Lib_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsLetter(e.KeyChar))
                e.Handled = false;
            else
                if (Char.IsSeparator(e.KeyChar))
                    e.Handled = false;
                else
                    if (Char.IsControl(e.KeyChar))
                        e.Handled = false;
                    else
                        e.Handled = true;
        }

        private void TxtCod_Cat_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsLetter(e.KeyChar))
                e.Handled = false;
            else
                if (Char.IsControl(e.KeyChar))
                    e.Handled = false;
                else
                    if (Char.IsDigit(e.KeyChar))
                        e.Handled = false;
                    else
                        e.Handled = true;
        }

        private void TxtCod_Edit_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsLetter(e.KeyChar))
                e.Handled = false;
            else
                if (Char.IsControl(e.KeyChar))
                    e.Handled = false;
                else
                    if (Char.IsDigit(e.KeyChar))
                        e.Handled = false;
                    else
                        e.Handled = true;
        }

        private void TxtIdioma_orig_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsLetter(e.KeyChar))
                e.Handled = false;
            else
                if (Char.IsControl(e.KeyChar))
                    e.Handled = false;
                else
                    e.Handled = true;
        }

        private void TxtIdioma_Lib_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsLetter(e.KeyChar))
                e.Handled = false;
            else
                if (Char.IsControl(e.KeyChar))
                    e.Handled = false;
                else
                    e.Handled = true;
        }

        private void TxtAño_Edic_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar))
                e.Handled = false;
            else
                if (Char.IsControl(e.KeyChar))
                    e.Handled = false;
                else
                    e.Handled = true;
        }

        private void TxtNum_Edic_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar))
                e.Handled = false;
            else
                if (Char.IsControl(e.KeyChar))
                    e.Handled = false;
                else
                    e.Handled = true;
        }

        private void TxtNum_Pag_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar))
                e.Handled = false;
            else
                if (Char.IsControl(e.KeyChar))
                    e.Handled = false;
                else
                    e.Handled = true;
        }

        private void TxtCod_Lib_Validating(object sender, CancelEventArgs e)
        {
            if (TxtCod_Lib.Text.Length == 0)
            {
                e.Cancel = true;
                errorProvider1.SetError(TxtCod_Lib, "Ingrese el Código del Libro");
            }
            else
                errorProvider1.SetError(TxtCod_Lib, null);
        }

        private void TxtTit_Lib_Validating(object sender, CancelEventArgs e)
        {
            if (TxtTit_Lib.Text.Length == 0)
            {
                e.Cancel = true;
                errorProvider1.SetError(TxtTit_Lib, "Ingrese el Título del Libro");
            }
            else
                errorProvider1.SetError(TxtTit_Lib, null);
        }

        private void TxtCod_Cat_Validating(object sender, CancelEventArgs e)
        {
            if (TxtCod_Cat.Text.Length == 0)
            {
                e.Cancel = true;
                errorProvider1.SetError(TxtCod_Cat, "Ingrese el código de la Categoria");
            }
            else
                errorProvider1.SetError(TxtCod_Cat, null);
        }

        private void TxtCod_Edit_Validating(object sender, CancelEventArgs e)
        {
            if (TxtCod_Edit.Text.Length == 0)
            {
                e.Cancel = true;
                errorProvider1.SetError(TxtCod_Edit, "Ingrese el código de la Editorial");
            }
            else
                errorProvider1.SetError(TxtCod_Edit, null);
        }

        private void TxtIdioma_Lib_Validating(object sender, CancelEventArgs e)
        {
            if (TxtIdioma_Lib.Text.Length == 0)
            {
                e.Cancel = true;
                errorProvider1.SetError(TxtIdioma_Lib, "Ingrese el Idioma del Libro");
            }
            else
                errorProvider1.SetError(TxtIdioma_Lib, null);
        }

        private void TxtAño_Edic_Validating(object sender, CancelEventArgs e)
        {
            if (int.Parse(TxtAño_Edic.Text) > 2013 || int.Parse(TxtAño_Edic.Text) < 1940)
            {
                e.Cancel = true;
                errorProvider1.SetError(TxtAño_Edic, "El Año no es válido");
            }
            else
                errorProvider1.SetError(TxtAño_Edic, null);
        }

        private void TxtAño_Ing_Validating(object sender, CancelEventArgs e)
        {
            if (int.Parse(TxtAño_Ing.Text) > 2013 || int.Parse(TxtAño_Ing.Text) < 1940)
            {
                e.Cancel = true;
                errorProvider1.SetError(TxtAño_Ing, "El Año no es válido");
            }
            else
                errorProvider1.SetError(TxtAño_Ing, null);
        }

       
    }
}

//        public String Autor(CLibro lib, string rutaBDBiblioteca)
//        {
//            AccDatBiblioteca datos = new AccDatBiblioteca();
//            SqlConnection cnBiblioteca = datos.ObtenerConexion(rutaBDBiblioteca);
//            if (cnBiblioteca != null)
//            {
//                SqlCommand cmd;
//                String sql = "spObtenerNombreAutor";
//                cmd = new SqlCommand(sql, cnBiblioteca);
//                cmd.CommandType = System.Data.CommandType.Text;
//                cmd.CommandType = System.Data.CommandType.StoredProcedure;
//                SqlDataReader dr;
//                cmd.Parameters.Add("@Cod_Lib", System.Data.SqlDbType.Char).Value = TxtCod_Lib.Text;          //cmd.Parameters.Add("@Cod_Lib", System.Data.SqlDbType.Char)
//                cmd.Parameters.AddWithValue("@Cod_lib", TxtCod_Lib);
//                dr = cmd.ExecuteReader();
//                cmd.ExecuteReader();
//                TxtAutor.Text = dr.Read(ToString);        // dr.ToString();
//                cnBiblioteca.Close();
//            }
//        }
//    }
//}